home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 23 / AACD 23.iso / AACD / Programming / tek / examples / heaptest.c < prev    next >
C/C++ Source or Header  |  2001-05-12  |  2KB  |  90 lines

  1.  
  2. /*
  3. **    tek/examples/heaptest.c
  4. **    heap memory test
  5. */
  6.  
  7. #include <stdio.h>
  8. #include <tek/exec.h>
  9. #include <tek/sock.h>
  10.  
  11. #define MAXTASKS    10
  12. #define NUMALLOC    100000
  13. #define NUMSLOTS    100
  14. #define MAXBYTES    1000
  15. #define MINBYTES    100
  16.  
  17. void clientfunc(TAPTR task)
  18. {
  19.     TAPTR parenttask = TTaskBaseTask(task);
  20.     TINT seed = TGetRandomSeed(task);
  21.  
  22.     TAPTR *slots = TTaskAlloc0(task, NUMSLOTS * sizeof(TAPTR));
  23.     if (slots)
  24.     {
  25.         TUINT i, j, size;
  26.         for (i = 0; i < NUMALLOC; ++i)
  27.         {
  28.             j = (seed = TGetRandom(seed)) % NUMSLOTS;
  29.             if (slots[j])
  30.             {
  31.                 TMemFill(slots[j], TTaskGetSize(parenttask, slots[j]), 0x55);
  32.                 TTaskFree(parenttask, slots[j]);
  33.                 slots[j] = TNULL;
  34.             }
  35.             else
  36.             {
  37.                 size = MINBYTES + ((seed = TGetRandom(seed)) % (MAXBYTES-MINBYTES));
  38.                 slots[j] = TTaskAlloc(parenttask, size);
  39.             }
  40.         }
  41.  
  42.         for (i = 0; i < NUMSLOTS; ++i)
  43.         {
  44.             TTaskFree(parenttask, slots[i]);
  45.         }
  46.         
  47.         TTaskFree(task, slots);
  48.     }
  49. }
  50.  
  51.  
  52.  
  53. int main(int argc, char **argv)
  54. {
  55.     TAPTR basetask;
  56.  
  57.     basetask = TCreateTask(TNULL, TNULL, TNULL);
  58.     if (basetask)
  59.     {
  60.         TTIME t1, t2;
  61.         TAPTR tasks[MAXTASKS];
  62.         int i, j;
  63.         
  64.         printf("creating %d tasks each allocating %d times from parent heap MMU\n", MAXTASKS, NUMALLOC);
  65.         fflush(NULL);
  66.  
  67.         TTimeQuery(basetask, &t1);
  68.  
  69.         for (i = 0, j = 0; i < MAXTASKS; ++i)
  70.         {
  71.             tasks[i] = TCreateTask(basetask, clientfunc, TNULL);
  72.             if (tasks[i]) j++;
  73.         }
  74.  
  75.         for (i = 0; i < MAXTASKS; ++i)
  76.         {
  77.             TDestroy(tasks[i]);
  78.         }
  79.  
  80.         TTimeQuery(basetask, &t2);
  81.         
  82.         printf("all done. successfully created %d tasks. time elapsed: %.4fs\n", j, TTIMETOF(&t2) - TTIMETOF(&t1));
  83.         fflush(NULL);
  84.  
  85.         TDestroy(basetask);
  86.     }
  87.  
  88.     return 0;
  89. }
  90.